package jdk8.method.reference.demo04.superX.method.reference;

/**
 * 定义子类
 **/
public class Man extends Human {
    @Override
    void sayHello() {
        System.out.println("hello, I'm Man");
    }

    // 定义调用函数式接口Greetable
    public void method(Greetable g){
        g.greet();
    }

    public void show() {
        // 调用method(), 方法的参数是一个函数式接口, 所以可以传递Lambda
        method(() -> {
            // 创建父类
            Human h = new Human();
            // 调用父类方法
            h.sayHello();
        });
    }

    /**
     * 方法引用优化
     * 使用supper引用
     * supper存在, 父类成员类存在
     */
    public void referenceShow() {
        method(super::sayHello);
    }

    public static void main(String[] args) {
        new Man().show();
        new Man().referenceShow();
    }
}
